home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 10, No. 03 (1989-03)(MicroSPARC)(Side A)[a].zip / Nibble Volume 10, No. 03 (1989-03)(MicroSPARC)(Side A)[a].po / SUPER.CURSOR.S < prev    next >
Text File  |  1996-12-24  |  5KB  |  174 lines

  1. ****************************
  2. * SUPER.CURSOR SOURCE CODE *
  3. * BY PAUL MEYERS           *
  4. * COPYRIGHT (C) 1989       *
  5. * MICROSPARC, INC.         *
  6. * CONCORD, MA 01742        *
  7. * MERLIN ASSEMBLER         *
  8. ****************************
  9.  
  10. CH        = $24          ;Cursor horizontal
  11. BASL      = $28          ;Location of cursor on creen
  12. RNDL      = $4E          ;Random seed
  13. RNDH      = $4F
  14. OURCH     = $57B         ;80 column CH
  15. DOSKSW    = $9EBA        ;DOS's jump to the KSW
  16. VECTIN    = $BE32        ;ProDOS's input address
  17. MLI       = $BF00
  18. KEY       = $C000
  19. STROBE    = $C010
  20. COL80     = $C01F
  21. TEXT1     = $C054
  22. TEXT2     = $C055
  23. COUT      = $FDED
  24.  
  25. *
  26. * The first part (init) will set up all the defaults
  27. * and the vectors for both DOS 3.3 and ProDOS
  28. *
  29.           ORG $2CE
  30. INIT      LDA #"_"
  31.           STA CHAR
  32.           LDA #$50
  33.           STA SPEED
  34.           STA FLASH?
  35.           STA CHANGE?
  36.           LDA MLI        ;Check for ProDOS
  37.           CMP #76
  38.           BNE NOTPRO
  39.           LDA #MAINLOOP  ;Set up for ProDOS
  40.           STA VECTIN
  41.           LDA #>MAINLOOP
  42.           STA VECTIN+1
  43.           RTS
  44. NOTPRO    LDA #$4C       ;Set up for DOS 3.3
  45.           STA DOSKSW
  46.           LDA #MAINLOOP
  47.           STA DOSKSW+1
  48.           LDA #>MAINLOOP
  49.           STA DOSKSW+2
  50.           RTS
  51. *
  52. * The Mainloop's main job is to clean up the screen,
  53. * check for the different types of cursor flashing.  It also
  54. * gets the screen character and replaces it with the cursor and
  55. * vice versa.
  56. *
  57. MAINLOOP  STA OLDCHAR
  58.           JSR CLEAN
  59.           PHA            ;Store it for awhile
  60.           BIT FLASH?     ;Check for flash
  61.           BMI NOFLASH    ;Branch to right subroutine
  62.           BIT CHANGE?    ;Are we changing the cursor?
  63.           BMI NOFLSH     ;Yes
  64. MAINLOOP1 LDA CHAR       ;Get the cursor
  65.           JSR BLINK      ;Blink it
  66.           BMI MAINLOOP2  ;A key was pressed
  67.           PLA            ;Get the previous char
  68.           PHA            ;Put it back
  69.           JSR BLINK      ;Blink it
  70.           BPL MAINLOOP1  ;Still no key
  71. MAINLOOP2 BMI CHECKS     ;Get the char
  72. NOFLSH    LDY #3
  73. NOFLSH1   LDA CHNGE,Y
  74.           STY YTEMP
  75.           JSR BLINK
  76.           BMI CHECKS
  77.           LDY YTEMP
  78.           DEY
  79.           BPL NOFLSH1
  80.           BMI NOFLSH
  81. NOFLASH   LDA CHAR
  82.           JSR BLINK
  83.           BPL NOFLASH
  84. CHECKS    LDA KEY        ;Get the key
  85.           CMP #$FF       ;Check for delete
  86.           BNE DONONE
  87.           PLA
  88.           JSR STORE
  89.           STA STROBE
  90.           LDA #$88       ;Backspace
  91.           JSR COUT
  92.           LDA #$A0
  93.           JSR COUT
  94.           LDA #$88
  95.           RTS
  96. DONONE    PLA
  97.           JSR STORE      ;Put it on the screen
  98.           LDA KEY        ;Get the character
  99.           STA STROBE     ;Reset strobe
  100.           RTS
  101.  
  102. *
  103. * Blink simply stores the accumulator's value onto the
  104. * screen, checks for a key press, and increments
  105. * the random number seed.
  106. *
  107.  
  108. BLINK     JSR STORE      ;Store it on the screen
  109.           LDA SPEED      ;Prepare to save the speed
  110.           STA WSPEED     ;Into the Work SPEED
  111. BLINK1    BIT KEY        ;Check for key
  112.           BMI BLRET      ;There was a key
  113.           INC RNDL       ;Generate random seed
  114.           BNE BLINK1     ;Look for another key
  115.           INC RNDH
  116.           DEC WSPEED     ;Decrement counter
  117.           BNE BLINK1
  118. BLRET     RTS
  119.  
  120. *
  121. * Clean will clean up the incorrect screen
  122. * and get a character from the screen, either
  123. * page 1 or page 2 (80 columns).
  124. *
  125. CLEAN     BIT COL80
  126.           BPL RETURN
  127.           LDY CH         ;Clean up the monitor's
  128.           LDA OLDCHAR    ;titanic attempt to
  129.           STA (BASL),Y   ;flash the cursor
  130. GET       LDA OURCH      ;Get the 80 col. CH
  131.           LSR            ;Divide it by two
  132.           TAY
  133.           PHP            ;Lock interupts while
  134.           SEI            ;screen holes are wrong
  135.           BIT TEXT2      ;Assume page 2,
  136.           BCC GETCHAR    ;evens
  137.           BIT TEXT1      ;Woops! page 1, odds
  138. GETCHAR   LDA (BASL),Y
  139.           BIT TEXT1      ;Set back to page1
  140.           PLP
  141. RETURN    RTS
  142. *
  143. * Store will store a character on either text
  144. * screen.
  145. *
  146. STORE     BIT COL80
  147.           BMI STORE80
  148.           LDY CH
  149.           STA (BASL),Y
  150.           RTS
  151. STORE80   PHA
  152.           LDA OURCH
  153.           LSR
  154.           TAY
  155.           PLA
  156.           PHP
  157.           SEI
  158.           BIT TEXT2
  159.           BCC STOREIT
  160.           BIT TEXT1
  161. STOREIT   STA (BASL),Y
  162.           BIT TEXT1
  163.           PLP
  164.           RTS
  165. CHAR      HEX 00
  166. SPEED     HEX 00
  167. FLASH?    HEX 00
  168. CHANGE?   HEX 00
  169. WSPEED    HEX 50
  170. OLDCHAR   HEX 00
  171. YTEMP     HEX 00
  172. CHNGE     ASC "\-/|"     ;Twirl characters
  173.           LST OFF
  174.